package com.example.demo15.controller;

import com.example.demo15.entity.User;
import com.example.demo15.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户控制器，处理与用户相关的REST API请求
 * 提供对用户数据的增删改查操作
 */
@RestController
@RequestMapping("/api/user") // 基础URL路径
public class UserController {

    @Autowired
    private UserService userService; // 注入用户服务，用于处理用户相关业务逻辑

    /**
     * 获取所有用户
     * HTTP GET 请求：/api/user
     *
     * @return 包含所有用户的列表
     */
    @GetMapping
    public List<User> getAllUsers() {
        return userService.findAll(); // 调用服务层方法获取所有用户
    }

    /**
     * 根据ID查询单个用户
     * HTTP GET 请求：/api/user/{id}
     *
     * @param id 要查询的用户ID
     * @return 如果找到用户则返回该用户对象，否则抛出运行时异常
     */
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Integer id) {
        return userService.findById(id) // 根据ID查找用户
                .orElseThrow(() -> new RuntimeException("用户不存在")); // 如果未找到，抛出异常
    }

    /**
     * 创建新用户
     * HTTP POST 请求：/api/user
     *
     * @param user 包含用户数据的请求体
     * @return 保存后的用户对象
     */
    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.save(user); // 调用服务层保存用户
    }

    /**
     * 更新现有用户
     * HTTP PUT 请求：/api/user/{id}
     *
     * @param id 要更新的用户ID
     * @param userDetails 包含更新信息的请求体
     * @return 更新后的用户对象
     */
    @PutMapping("/{id}")
    public User updateUser(@PathVariable Integer id, @RequestBody User userDetails) {
        // 先查找要更新的用户
        User user = userService.findById(id)
                .orElseThrow(() -> new RuntimeException("用户不存在")); // 如果未找到，抛出异常

        // 更新用户属性
        user.setUsername(userDetails.getUsername());
        user.setPassword(userDetails.getPassword());

        return userService.save(user); // 保存更新后的用户
    }

    /**
     * 删除用户
     * HTTP DELETE 请求：/api/user/{id}
     *
     * @param id 要删除的用户ID
     */
    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Integer id) {
        userService.deleteById(id); // 调用服务层删除用户
    }
}
